package com.jmx.yp.service.group;

import com.jmx.yp.entity.GroupInfo;

import java.util.List;
import java.util.Map;

public interface IGroupinfoService {
	
	/*
	 * 新增组织
	 */
	abstract void addGroup(GroupInfo info) throws Exception;
	
	/*
	 * 新增组织后，修改父组织状态为有子孙
	 */
	abstract void updateGroupNext(Long groupId) throws Exception;
	
	/**
	 * 组织编号是否存在
	 * @return 有返回true，否则false
	 * @throws Exception
	 */	
	abstract boolean groupCodeIsDup(String groupcode) throws Exception;

	/**
	 * 组织名称是否存在
	 * @return 有返回true，否则false
	 * @throws Exception
	 */	
	abstract boolean groupNameIsDup(String groupname) throws Exception;
	
	/*
	 * 浏览组织
	 */
	abstract GroupInfo viewGroupInfo(Long groupId) throws Exception;
	
	/*
	 * 浏览组织后，修改组织
	 */
	abstract void updateGroupInfo(GroupInfo ginfo) throws Exception;
	
	/**
	 * 根据组织编号找出下级组织信息
	 * @param groupId
	 * @param loadCurrentGroupFlag 是否需要加载当前组织的标志
	 * @throws Exception
	 */
	abstract List currentGroupChildes(Long groupId, boolean loadCurrentGroupFlag) throws Exception;
	
	/**
	 * 根据组织编号判断是否属于JMX
	 * @param groupId
	 * @return 属于JMX返回true，否则false
	 * @throws Exception
	 */
	abstract boolean isBlongToJMX(Long groupId) throws Exception;
	
	/**
	 * 根据机构ID查询机构名称
	 * @param groupId 若为NULL时，表示查询杰马逊组织名称
	 * @return
	 * @throws Exception
	 */
	abstract Map getGroupNameById(Long groupId) throws Exception;

	
	/**
	 * 根据机构ID查询当前机构级别及父路径
	 * @param groupId 若为NULL时，表示查询杰马逊组织名称
	 * @return
	 * @throws Exception
	 */
	abstract Map getGroupLvlDirById(Long groupId) throws Exception;
	
	/**
	 * 根据组织有无根节点。针对超级管理员 操作
	 * @return 有返回true，否则false
	 * @throws Exception
	 */	
	abstract boolean hisGroupRoot() throws Exception;

	
	/**
	 * 组织机构及其向上父类是否被冻结
	 * @param groupId
	 * @return 冻结，返回true
	 * @throws Exception
	 */
	abstract boolean isFreezed(Long groupId) throws Exception;
	
	/**
	 * 获取组织机构树形结构
	 * 	  备注：当组织机构与组织编码不为空时，表示查询在根树ID范围内的查询
	 * @param rootGroupId   根树ID
	 * @param queryGroupName 查询组织机构（可为空）
	 * @param queryGroupCode 查询组织机构编码（可为空）
	 * @param 若不为空，则表示查询杰马逊组织，否则为组织机构树查询
	 * @return 返回XML文件字符串
	 * @throws Exception 
	 */
	abstract String getGroupTreeXML(Long rootGroupId, String rootGroupName, String groupCode, Long jmxId) throws Exception;
	
	/**
	 * 获取组织机构的根结点
	 * @param rootGroupId
	 * @param rootGroupName
	 * @param queryGroupName
	 * @param queryGroupCode
	 * @param flag 若为true，表示查询杰马逊机构管理员，只查询杰马逊及其下级组织即可。
	 * @return ID;NAME
	 * @throws Exception
	 */
	abstract String getGroupRoot(Long rootGroupId, String rootGroupName, String rootGroupCode,  String queryGroupName, String queryGroupCode, boolean flag) throws Exception;
	
	/**
	 * 根据组织代码或名称判断是否属于指定的组织及其子组织
	 * @param apponitGroupId
	 * @param groupCode
	 * @param groupName
	 * @return
	 * @throws Exception
	 */
	abstract boolean isBelongToAppointGroup(Long apponitGroupId, String groupCode, String groupName) throws Exception;

}
